package com.whpost.service.tools;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Date;
import java.util.Optional;
import java.util.TimeZone;

public class DateConverter {
    // 定义支持的日期时间格式
    private static final DateTimeFormatter FORMATTER_DATE_TIME =
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    private static final DateTimeFormatter FORMATTER_DATE =
            DateTimeFormatter.ofPattern("yyyy-MM-dd");

    public static Optional<Date> convertToDate(String dateStr) {
        if (dateStr == null || dateStr.trim().isEmpty()) {
            return Optional.empty();
        }

        try {
            // 尝试解析为 LocalDateTime（包含时间部分）
            LocalDateTime localDateTime = LocalDateTime.parse(dateStr, FORMATTER_DATE_TIME);
            return Optional.of(convertToDate(localDateTime));
        } catch (DateTimeParseException e1) {
            try {
                // 尝试解析为 LocalDate（仅日期部分）
                LocalDate localDate = LocalDate.parse(dateStr, FORMATTER_DATE);
                return Optional.of(convertToDate(localDate));
            } catch (DateTimeParseException e2) {
                // 如果两种格式都不匹配，返回空
                System.err.println("日期格式不支持: " + dateStr);
                return Optional.empty();
            }
        }
    }

    // 将 LocalDateTime 转换为 Date
    private static Date convertToDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(TimeZone.getDefault().toZoneId()).toInstant());
    }

    // 将 LocalDate 转换为 Date（默认时间为 00:00:00）
    private static Date convertToDate(LocalDate localDate) {
        return Date.from(localDate.atStartOfDay(TimeZone.getDefault().toZoneId()).toInstant());
    }

    // 示例用法
    public static void main(String[] args) {
        String dateTimeStr = "2025-02-01 12:12:00";
        String dateStr = "2025-02-01";

        convertToDate(dateTimeStr).ifPresent(date ->
                System.out.println("DateTime 转换结果: " + date));

        convertToDate(dateStr).ifPresent(date ->
                System.out.println("Date 转换结果: " + date));
    }
}